home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / python-support / gnome-games-data / gnome_sudoku / pausable.py < prev    next >
Encoding:
Python Source  |  2009-04-14  |  1.6 KB  |  64 lines

  1. # -*- coding: utf-8 -*-
  2. import time
  3.  
  4. class MethodWrapper:
  5.  
  6.     def __call__ (self, cls):
  7.         for attr in dir(cls):
  8.             attrobj = getattr(cls,attr)
  9.             if callable(attrobj) and attr.find('__')!=0:
  10.                 setattr(cls,attr,self.wrap(attrobj))
  11.  
  12.     def wrap (self,f):
  13.         def _(*args, **kwargs):
  14.             self.wrapper(*args,**kwargs)
  15.             return f(*args,**kwargs)
  16.         return _
  17.  
  18.     def wrapper (self, *args, **kwargs):
  19.         print args,kwargs
  20.  
  21. class PausableWrapper (MethodWrapper):
  22.  
  23.     def __init__ (self,sleep_for=1):
  24.         self.sleep_for = sleep_for
  25.  
  26.     def __call__ (self, cls):
  27.         MethodWrapper.__call__(self, cls)
  28.         cls.paused = False
  29.         cls.terminated = False
  30.         cls.pause = lambda *args: self.pause(cls)
  31.         cls.resume = lambda *args: self.resume(cls)
  32.         cls.terminate = lambda *args: self.terminate(cls)
  33.         cls.stop = lambda *args: self.terminate(cls)
  34.         self.init_wrap(cls.__init__)
  35.         
  36.  
  37.     def init_wrap (self, f):
  38.         def _(cls, *args, **kwargs):
  39.             cls.paused = False
  40.             cls.terminated = False
  41.             return f(cls,*args,**kwargs)
  42.         return _
  43.  
  44.     def pause (self, cls):
  45.         cls.paused = True
  46.  
  47.     def resume (self, cls):
  48.         cls.paused = False
  49.  
  50.     def terminate (self, cls):
  51.         cls.terminated = True
  52.  
  53.     def unterminate (self, cls):
  54.         cls.terminated = False
  55.  
  56.     def wrapper (self, cls, *args, **kwargs):
  57.         if cls.terminated: raise "Terminated!"
  58.         while cls.paused:
  59.             if cls.terminated: raise "Terminated!"
  60.             time.sleep(self.sleep_for)
  61.     
  62.             
  63. make_pausable = PausableWrapper()
  64.